package com.example.demo.controller;
import com.example.demo.dto.ApiResponse;
import com.example.demo.entity.Order;
import com.example.demo.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * 订单管理控制器
 * 处理订单相关的HTTP请求，包括创建订单、查询订单、更新订单状态和取消订单等操作
 * 提供RESTful API接口，支持订单的全生命周期管理
 */
@RestController
@RequestMapping("/api/orders")
public class OrderController {
    
    // 注入订单服务，处理订单相关的业务逻辑
    @Autowired
    private OrderService orderService;
    
    /**
     * 创建新订单
     * 将用户购物车中的商品转换为订单，并清空购物车
     * 
     * @param userId 用户ID，订单所属的用户
     * @param shippingAddress 配送地址，商品将被发送到此地址
     * @param paymentMethod 支付方式，如"支付宝"、"微信支付"等
     * @return 创建成功的订单信息，包含订单ID、订单项、总金额等
     */
//    @PostMapping
//    public ResponseEntity<ApiResponse<Order>> createOrder(
//            @RequestParam Integer userId,
//            @RequestParam String shippingAddress,
//            @RequestParam String paymentMethod) {
//        try {
//            Order order = orderService.createOrder(userId, shippingAddress, paymentMethod);
//            logger.info("订单创建成功: {}", JsonUtil.toJson(order));
//            return ResponseEntity.ok(ApiResponse.success("订单创建成功", order));
//        } catch (Exception e) {
//            logger.error("订单创建失败: {}", e.getMessage());
//            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
//        }
//    }
//
    /**
     * 根据ID获取订单详细信息
     * 包括订单基本信息和订单项列表
     * 
     * @param orderId 订单ID，唯一标识一个订单
     * @return 订单详细信息，包含订单状态、支付方式、配送地址等
     */
//    @GetMapping("/{orderId}")
//    public ResponseEntity<ApiResponse<Order>> getOrderById(@PathVariable Integer orderId) {
//        try {
//            Order order = orderService.getOrderById(orderId);
//            return ResponseEntity.ok(ApiResponse.success(order));
//        } catch (Exception e) {
//            logger.error("获取订单信息失败: {}", e.getMessage());
//            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
//        }
//    }
    
    /**
     * 获取用户的所有订单列表
     * 按创建时间降序排列
     * 
     * @param userId 用户ID，查询该用户的所有订单
     * @return 用户的订单列表，包含每个订单的基本信息
     */
    @GetMapping("/user/{userId}")
    public ResponseEntity<ApiResponse<List<Order>>> getUserOrders(@PathVariable Integer userId) {
        List<Order> orders = orderService.getUserOrders(userId);
        return ResponseEntity.ok(ApiResponse.success(orders));
    }
//
//    /**
//     * 根据订单状态获取订单列表
//     * 可用于管理员查看不同状态的订单
//     *
//     * @param status 订单状态，如待付款、已付款、已发货等
//     * @return 指定状态的订单列表
//     */
//    @GetMapping("/status/{status}")
//    public ResponseEntity<ApiResponse<List<Order>>> getOrdersByStatus(@PathVariable Order.OrderStatus status) {
//        List<Order> orders = orderService.getOrdersByStatus(status);
//        return ResponseEntity.ok(ApiResponse.success(orders));
//    }
//
//    /**
//     * 根据日期范围获取订单列表
//     * 可用于统计分析特定时间段的订单数据
//     *
//     * @param startDate 开始日期，查询该日期之后创建的订单
//     * @param endDate 结束日期，查询该日期之前创建的订单
//     * @return 指定日期范围内的订单列表
//     */
//    @GetMapping("/date-range")
//    public ResponseEntity<ApiResponse<List<Order>>> getOrdersByDateRange(
//            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startDate,
//            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endDate) {
//        List<Order> orders = orderService.getOrdersByDateRange(startDate, endDate);
//        return ResponseEntity.ok(ApiResponse.success(orders));
//    }
//
    /**
     * 更新订单状态
     * 用于订单流转过程中的状态变更，如支付完成、发货、确认收货等
     * 
     * @param orderId 订单ID，要更新状态的订单
     * @param status 新状态，订单将被更新为此状态
     * @return 更新后的订单信息，包含新的状态和更新时间
     */
    @PutMapping("/{orderId}/status")
    public ResponseEntity<ApiResponse<Order>> updateOrderStatus(
            @PathVariable Integer orderId, @RequestParam Order.OrderStatus status) {
        try {
            Order order = orderService.updateOrderStatus(orderId, String.valueOf(status));
            return ResponseEntity.ok(ApiResponse.success("订单状态更新成功", order));
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
        }
    }
    
    /**
     * 取消订单
     * 仅允许取消待付款状态的订单，已付款的订单需要申请退款
     * 取消订单会恢复商品库存
     * 
     * @param orderId 订单ID，要取消的订单
     * @return 操作结果，成功或失败的消息
     */
    @PutMapping("/{orderId}/cancel")
    public ResponseEntity<ApiResponse<Void>> cancelOrder(@PathVariable Integer orderId) {
        try {
            orderService.cancelOrder(orderId);
            return ResponseEntity.ok(ApiResponse.success("订单取消成功", null));
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(ApiResponse.error(e.getMessage()));
        }
    }
}